package com.ruyuan.starter.async.listener;

import com.ruyuan.starter.async.AsyncContext;
import com.ruyuan.starter.async.event.BaseEvent;
import com.ruyuan.starter.async.handler.BossEventHandler;

/**
 * 使用的时候先定义一个event，然后再写一个这个接口的实现来处理对应的event
 *
 * @author zhonghuashishan
 */
public interface EventListener<E extends BaseEvent> extends java.util.EventListener {

    /**
     * BossEventHandler在分发事件的时候, 会调用这个方法把事件传进来, 来找能处理这个事件的listener
     * 如果接受这个事件，那就会调onEvent方法, 反之就会不调onEvent方法
     * @param event 自己定义的事件
     * @see BossEventHandler
     */
    boolean accept(BaseEvent event);

    /**
     * 实现处理具体事件的逻辑
     * @param event 自己定义的事件
     */
    void onEvent(E event, AsyncContext eventContext);

}